package com.acmen.easyapi.generator;

import com.acmen.easyapi.annotation.Param;
import com.acmen.easyapi.util.StringUtil;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;

/**
 * @author acmen
 * 手机号数据获取器
 */
@Component
public class EmailDataGenerator implements DataGenerator {
    @Override
    public boolean matches(Field field, Param param) {
        // 如果参数的标签以"邮箱地址"或"邮箱"结尾，则返回true
        if (param.label().endsWith("邮箱地址") || param.label().endsWith("邮箱")) {
            return true;
        }

        // 如果字段的名称为"email"（忽略大小写），则返回true
        if (field.getName().equalsIgnoreCase("email")) {
            return true;
        }

        // 如果字段的名称为"emails"（忽略大小写），则返回true
        if (field.getName().equalsIgnoreCase("emails")) {
            return true;
        }

        // 默认情况下，返回false
        return false;

    }

    @Override
    public Object generate(Field field, Param param) {
        Random random = new Random(); // 创建一个随机数生成器

        // 如果字段的类型是数组或者可分配给Collection类型的子类
        if (field.getType().isArray() || Collection.class.isAssignableFrom(field.getType())) {
            List datas = new ArrayList(); // 创建一个列表用于存储数据
            for (int i = 0; i < 3; i++) { // 循环3次
                int num = random.nextInt(1000000); // 生成一个0到999999之间的随机整数
                datas.add("168" + StringUtil.leftPad(String.valueOf(num), 6, "0") + "@qq.com"); // 将生成的随机数拼接成邮箱地址，并添加到列表中
            }
            return datas; // 返回生成的邮箱地址列表
        } else { // 如果字段的类型不是数组或不可分配给Collection类型的子类
            int num = random.nextInt(1000000); // 生成一个0到999999之间的随机整数
            return "168" + StringUtil.leftPad(String.valueOf(num), 6, "0") + "@qq.com"; // 将生成的随机数拼接成邮箱地址并返回
        }

    }

    /**
     * 数据获取说明
     *
     * @return
     */
    @Override
    public String getNote() {
        String note = "邮箱地址：";
        note += "①当字段名为'email'时随机生成一个邮箱地址；<br>";
        note += TAB + "②当字段名为'emails'时随机生成一个邮箱地址列表；<br>";
        note += TAB + "③当@ReqParam.name以'邮箱地址'或者'邮箱'结尾时随机生成一个邮箱地址。";
        return note;
    }
}
